import java.util.*;

public class Map{

	private ArrayList<Tile> levelTiles;
	private ArrayList<Creature> creaturePos;
	private char[][] levelView;
	private int maxy;
	private int maxx;
	
	public Map(){
		levelTiles = new ArrayList();
		creaturePos = new ArrayList();
	}
	
	
	public void addTile(Tile n){
		levelTiles.add(n);
	}
	public void addCreature(Creature n){
		creaturePos.add(n);
	}
	
	public Tile getTile(int x, int y){
		for(int i = 0; i< levelTiles.size() ; i++){
			if(levelTiles.get(i).getX() == x && levelTiles.get(i).getY() == y){
				return levelTiles.get(i);
			}
		}
		return null;
	}
	
	public void setTile(Tile n){
		for(int i = 0; i< levelTiles.size() ; i++){
			if(levelTiles.get(i).getX() == n.getX() && levelTiles.get(i).getY() == n.getY() ){
				levelTiles.set(i, n);
			}
		}
		updateView();
	}
	
	
	public void updateView(){
		for(int i = 0; i < levelTiles.size(); i++){
			if(levelTiles.get(i).getX() > maxx){
				maxx = levelTiles.get(i).getX();
			}
			if(levelTiles.get(i).getY() > maxy){
				maxy = levelTiles.get(i).getY();
			}
		}
		
		levelView = new char[maxy][maxx];
		
		for(int iy = 0; iy < maxy; iy++){	
			for(int ix = 0; ix < maxx; ix++){
				for(int j = 0; j < levelTiles.size(); j++){
					if(levelTiles.get(j).getX() == ix && levelTiles.get(j).getY() == iy){
						levelView[iy][ix] = levelTiles.get(j).getForm();
					}
				}
			}
		}
	}
	
	public void printTiles(){
		for(int y = 0; y< maxy; y++){
			System.out.println();
			for(int x = 0; x< maxx; x++){
				System.out.print(levelView[y][x]);
			}
		}
	}
	public char[][] getLevelView(){ 
		return levelView;
	}
	public ArrayList<Creature> getCreatures(){ 
		return creaturePos;
	}
}